/* 
函数重载: 函数名相同, 而形参不同的多个函数
*/
/* 
需求: 我们有一个add函数，它可以接收2个string类型的参数进行拼接，也可以接收2个number类型的参数进行相加 
*/

(() => {
  // 函数重载声明
  function add(x: string, y: string): string;
  function add(x: number, y: number): number;
  
  // 定义函数实现
  function add (x: string|number, y: string|number): string|number {
    // if (typeof x==='string' && typeof y==='string') {
    //   return x + y
    // } else if (typeof x==='number' && typeof y==='number') {
    //   return x + y
    // } else {
    //   throw new Error('参数类型不正确')
    // }
    if (typeof x==='string') {
      return x + y
    } else {
      return x = y
    }
  }
  

  console.log(add(1, 2))
  console.log(add('a', 'b'))
  // console.log(add(1, 'a')) // error
})()